www.gusucode.com > VC++迷宫游戏源代码源码程序 > VC++迷宫游戏源代码源码程序\code\WinGame 2.7\MazeView.cpp

    //Download by http://www.NewXing.com
#include "stdafx.h"
#include "MazeView.h"
#include "CreateMap.h"
#include "AnimDate.h"
//=================================================================================
void	CMazeView::New(int w,int h)
{
		//将迷宫显示区域置于大地图的右下方
	m_x			=	( w - PM_I+1) *64;	
	m_MaxX		=	( w - PM_I +1) *64;
	m_y			=	( h - PM_J +1) *64;
	m_MaxY		=	( h - PM_J +1) *64;
	CreateMap(w,h,&m_Exit);
	MarkMap();
	CAnimCtrl::New();
	if(m_Exit.x==0)
	{
		m_ExitCtrl.New(&LeftExitBmp,0,0,g_LeftExitFrm,FRAME_REPEAT);
	}
	else
	{
		m_ExitCtrl.New(&UpExitBmp,0,0,g_UpExitFrm,FRAME_REPEAT);
	}
}
int	CMazeView::Play(void*)
{
	m_ExitCtrl.Play(NULL);
	return 0;
}
void CMazeView::Draw(CBmp24*p)
{
	int I = m_x / 64;
	int J = m_y / 64;
	int vx = m_x % 64;
	int vy = m_y % 64;
	int x;
	int y;
	int i = 0;
	int j = 0;
	int t;
	for( i=0; i<PM_I; i++ )
	{
		for( j=0; j<PM_J; j++ )
		{
				x = PM_X+i*64-vx;
				y = PM_Y+j*64-vy;
				//if(x<0||y<0)
				//TRACE("x=%d,y=%d\n",x,y);
				//在此画图
				t=g_MazeMap[I+i][J+j];
				if(t>0)
				{
					MazeWall[0].DrawBmp(p,x,y,0,m_EffectFlag);	
				}
				else
				{
					MazeWall[-t].DrawBmp(p,x,y,0,m_EffectFlag);	
				}
		}
	}
	x= m_Exit.x*64 - m_x+PM_X ;
	y= m_Exit.y*64 - m_y+PM_Y ;
	m_ExitCtrl.SetXY(x,y);
}
void CMazeView::MarkMap()
{
	int i,j,r;
	for( i=0; i<g_MazeWidth; i++ )
	{
	  if( g_MazeMap[i][1]>0 )			g_MazeMap[i][0] = -1;
	  else								g_MazeMap[i][0] = -2;
	  if( g_MazeMap[i][g_MazeHeight-2]>0)	g_MazeMap[i][g_MazeHeight-1] = -1;
	  else									g_MazeMap[i][g_MazeHeight-1] = -3;
	}
	g_MazeMap[m_Exit.x][m_Exit.y]=1;
	for( i=0; i<g_MazeWidth; i++ )
	for( j=1; j<g_MazeHeight-1; j++ )
	{
		if(g_MazeMap[i][j]>0)
			continue;

		r=GetMarkCode(i,j);
		switch(r)
		{
			case 0:
			g_MazeMap[i][j] = -1;
			break;
			case 1:
			g_MazeMap[i][j] = -2;
			break;
			case 10:
			g_MazeMap[i][j] = -3;
			break;
			case 11: 
			g_MazeMap[i][j] = -4;
			break;
			default	:
			//g_MazeMap[i][j] = -1;
			break;
		}
	}
}
int  CMazeView::GetMarkCode(int i,int j)
{
	int r=0;
	r	+=	g_MazeMap[i][j-1]>0? 	0	:	1;	
	r	*=	10;
	r	+=	g_MazeMap[i][j+1]>0? 	0	:	1;
	return r;
}
CMazeView::CMazeView(){}
CMazeView::~CMazeView(){}